package com.cdty.chess.util;

import java.io.InputStream;
import java.util.List;

/**
 * 文件操作工具类接口
 */
public interface FileUtils {
    
    /**
     * 上传单个文件
     * @param inputStream 文件输入流
     * @param fileName 文件名
     * @param contentType 文件类型
     * @return 文件访问URL
     */
    String uploadFile(InputStream inputStream, String fileName, String contentType);
    
    /**
     * 批量上传文件
     * @param files 文件列表,每个元素包含输入流、文件名和类型
     * @return 文件访问URL列表
     */
    List<String> uploadFiles(List<FileUploadRequest> files);
    
    /**
     * 删除单个文件
     * @param fileUrl 文件URL
     */
    void deleteFile(String fileUrl);
    
    /**
     * 批量删除文件
     * @param fileUrls 文件URL列表
     */
    void deleteFiles(List<String> fileUrls);
    
    /**
     * 列出指定目录下的所有文件和子目录
     * @param prefix 目录前缀，为空则列出根目录
     * @return 文件和目录列表
     */
    CosFileList listFiles(String prefix);
    
    /**
     * 创建目录
     * @param directory 目录路径
     */
    void createDirectory(String directory);
    
    /**
     * 文件上传请求
     */
    record FileUploadRequest(
        InputStream inputStream,
        String fileName,
        String contentType,
        long size
    ) {}
    
    /**
     * COS文件列表
     */
    record CosFileList(
        List<CosFileInfo> files,
        List<String> directories
    ) {}
    
    /**
     * COS文件信息
     */
    record CosFileInfo(
        String key,
        String url,
        long size,
        String lastModified
    ) {}
}